﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using GestionCases;

namespace GestionEco
{
    public abstract class Animal : EtreVivant
    {

        private int attaque;
        private int esquive;
        private int degats;
        private int vue;
        private int regen;
        private int faimMax;
        private int faimActuelle;
        private int coeffFaim;

        #region assesseurs
        public int Attaque
        {
            get { return attaque; }
            set { attaque = value; }
        }

        public int Esquive
        {
            get { return esquive; }
            set { esquive = value; }
        }

        public int Degats
        {
            get { return degats; }
            set { degats = value; }
        }

        public int Vue
        {
            get { return vue; }
            set { vue = value; }
        }

        public int Regen
        {
            get { return regen; }
            set { regen = value; }
        }

        protected int FaimMax
        {
            get { return faimMax; }
            set { faimMax = value; }
        }

        protected int FaimActuelle
        {
            get { return faimActuelle; }
            set { faimActuelle = value; }
        }

        public int CoeffFaim
        {
            get { return coeffFaim; }
            set { coeffFaim = value; }
        }
        #endregion

        public Animal(int uneAttaque, int uneEsquive, int desDegats, int uneVue, int uneRegen, int uneFaimMax, int unCoeffFaim, int uneVieMax, int uneSoifMax, int unCoeffSoif, int desPointsActionActuels, int unAgeMax, int uneMajorite, int unNbTourReprod, string unSexe, Color uneCouleur)
            : base(uneVieMax, uneSoifMax, unCoeffSoif, desPointsActionActuels, unAgeMax, uneMajorite, unNbTourReprod, unSexe, uneCouleur)
        {
            Random rnd = new Random();
            int randomNumber = rnd.Next(1, 7);

            this.attaque = uneAttaque * (rnd.Next(1, 7));
            this.esquive = uneEsquive*(rnd.Next(1, 7));
            this.degats = desDegats*(rnd.Next(1, 7));
            this.vue = uneVue*rnd.Next(1, 7);
            this.regen = uneRegen*rnd.Next(1, 7);
            this.faimMax = uneFaimMax * rnd.Next(1, 7);
            this.faimActuelle = this.faimMax;
            this.coeffFaim = unCoeffFaim;



        }

        public override void afficher()
        {
            Console.WriteLine("je suis un animal");
        }

        public override void seDeplacer()
        {
            base.seDeplacer();
        }

        public override void seRegenerer()
        {
            base.seRegenerer();

            Random rnd = new Random();
            int scoreRegen = 0;
            
            // on lance le nombre de Dés de régénération de l'animal
            for (int i = 0; i < this.regen; i++)
            {
                scoreRegen += rnd.Next(1, 3);
            }

            // on ajoute le score de régénération a la vie actuelle de l'animal
            this.VieActuelle += scoreRegen;

            // gestion du cas ou la nouvelle quantitée de vie dépasse le nombre de points de vie max de l'aniaml
            if (this.VieActuelle > this.VieMax)
            {
                this.VieActuelle = this.VieMax;
            }
        }

        public override void vieillir()
        {
            Random rnd = new Random();
            int scoreAge;
            base.vieillir();

            // Si le nouvel age de l'animal est paire on va lui ajouter semi aléatoirement une caractéristique
            if (this.Age % 2 == 0)
            {
                scoreAge = rnd.Next(1, 100);

                if (scoreAge <= 10)
                {
                    VieMax += 10;
                    VieActuelle += 10;
                }
                else if (scoreAge <= 20 && scoreAge > 10)
                {
                    faimMax += 10;
                    faimActuelle += 10;
                }
                else if (scoreAge <= 30 && scoreAge > 20)
                {
                    SoifMax += 10;
                    SoifActuelle += 10;
                }
                else if (scoreAge <= 40 && scoreAge > 30)
                {
                    attaque += 1;
                }
                else if (scoreAge <= 50 && scoreAge > 40)
                {
                    degats += 1;
                }
                else if (scoreAge <= 60 && scoreAge > 50)
                {
                    esquive += 1;
                }
                else if (scoreAge <= 70 && scoreAge > 60)
                {
                    regen += 1;
                }
                else if (scoreAge <= 75 && scoreAge > 70)
                {
                    vue += 1;
                }
            }
        }

        public override void seNourrir()
        {
            base.seNourrir();
        }

        public override void boire(Case uneCase)
        {
            base.boire(uneCase);
        }

        public override void seReproduire()
        {
            base.seReproduire();
        }
    }
}
